import { createI18n, useI18n } from 'vue-i18n';

import zh from './lang/zh-CN'; // 中文语言包
import moment from 'moment';
import { nextTick } from 'vue';


export const defaultlang = 'zh-CN'; // 默认语言

const messages = {
  'zh-CN': {
   ...zh,
  },
};


const loadedLanguages = [defaultlang]

export const i18n = createI18n({
    legacy: false, // 组合式API
    fallbackLocale: defaultlang, // 当翻译不存在时使用的语言
    locale: defaultlang, // 默认语言
    messages, // 语言包
});

export function i18nRender(key: string) {
    return (i18n.global as any).t(`${key}`);
}


export function setI18nLanguage(lang: string) {
  const { locale } = useI18n();
  locale.value = lang;
  document.querySelector('html')?.setAttribute('lang', lang)
  return lang
}

export async function loadLanguageAsync (lang = defaultlang) {
  const { locale,getLocaleMessage, setLocaleMessage } = useI18n();
  if ( locale.value !== lang) {
    if (!loadedLanguages.includes(lang) && !getLocaleMessage(lang)) {
      try {
        const langMessage = await import(`./lang/${lang}/index.ts`);
        setLocaleMessage(lang, langMessage.default);
        loadedLanguages.push(lang);
        moment.updateLocale(langMessage.default.momentName, langMessage.default.momentLocale);
        return setI18nLanguage(lang);
      }
      catch (error) {
        return Promise.reject(error);
      }
    }

    setI18nLanguage(lang);
  }

  return nextTick()
}

export default i18n;